// pages/index/index.js
const app = getApp();
const request = require('../../utils/request');

Page({
  data: {
    categories: [],
    products: [],
    loading: true,
    selectedCategory: null
  },
  onShareAppMessage() {
    return {
      title: '电子虚拟物品商城首页', // 分享卡片上显示的标题
      imageUrl: 'https://api.tiyue.work/uploads/logo/logo.png' // 自定义分享图片，建议尺寸 1:1
    }
  },
  onLoad() {
    this.loadCategories();
    this.loadProducts();
  },

  // 加载商品分类
  async loadCategories() {
    try {
      const res = await request.get('/categories');
      if (res.success) {
        // 添加默认图标（如果后端没有返回）
        const categoriesWithIcons = res.data.map(cat => {
          if (!cat.icon) {
            // 根据分类名称添加默认图标
            const iconMap = {
              '游戏充值': '🎮',
              '视频会员': '📺',
              '音乐会员': '🎵',
              '软件激活': '💻',
              '其他虚拟': '🎁'
            };
            cat.icon = iconMap[cat.name] || '📦';
          }
          return cat;
        });

        this.setData({
          categories: [
            { id: null, name: '全部', icon: 'https://api.tiyue.work/uploads/icon/All.png' },
            ...categoriesWithIcons
          ]
        });
      }
    } catch (error) {
      console.error('加载分类失败:', error);
    }
  },

  // 切换分类
  selectCategory(e) {
    const categoryId = e.currentTarget.dataset.id;
    this.setData({
      selectedCategory: categoryId,
      loading: true
    });
    this.loadProducts();
  },

  // 加载商品列表
  async loadProducts() {
    try {
      const params = {};
      if (this.data.selectedCategory) {
        params.category_id = this.data.selectedCategory;
      }

      const res = await request.get('/products', params);
      if (res.success) {
        // 处理图片字段：确保是数组格式
        const products = (res.data.list || res.data).map(product => {
          // 处理图片字段：支持数组格式或单个URL
          if (product.image) {
            if (Array.isArray(product.image)) {
              // 已经是数组，使用第一个作为列表显示
              product.imageUrl = product.image[0] || '';
              product.imageCount = product.image.length; // 保存图片数量
            } else if (typeof product.image === 'string') {
              // 尝试解析JSON
              try {
                const parsed = JSON.parse(product.image);
                if (Array.isArray(parsed)) {
                  product.imageUrl = parsed[0] || '';
                  product.imageCount = parsed.length;
                } else {
                  product.imageUrl = parsed;
                  product.imageCount = 1;
                }
              } catch {
                // 不是JSON，直接使用
                product.imageUrl = product.image;
                product.imageCount = 1;
              }
            } else {
              product.imageUrl = '';
              product.imageCount = 0;
            }
          } else {
            product.imageUrl = '';
            product.imageCount = 0;
          }
          return product;
        });

        this.setData({
          products: products,
          loading: false
        });
      } else {
        wx.showToast({
          title: res.message || '加载失败',
          icon: 'none'
        });
      }
    } catch (error) {
      console.error('加载商品失败:', error);
      wx.showToast({
        title: '网络错误',
        icon: 'none'
      });
      this.setData({ loading: false });
    }
  },

  // 查看商品详情
  viewProduct(e) {
    const id = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/product-detail/product-detail?id=${id}`
    });
  },

  // 购买商品
  async buyProduct(e) {
    const productId = e.currentTarget.dataset.id;
    const userInfo = wx.getStorageSync('userInfo');
    const token = wx.getStorageSync('token');

    if (!token || !userInfo || !userInfo.id) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      });
      return;
    }

    // 检查是否是游客（游客不能支付）
    if (userInfo.isGuest === true || userInfo.isGuest === 1) {
      wx.showModal({
        title: '提示',
        content: '游客不能支付，请先登录账号或注册账号',
        confirmText: '去登录',
        success: (res) => {
          if (res.confirm) {
            wx.navigateTo({
              url: '/pages/login/login'
            });
          }
        }
      });
      return;
    }

    wx.showLoading({
      title: '正在创建订单...',
      mask: true
    });

    try {
      // 获取微信登录code（用于换取openid进行支付）
      let code = null;
      try {
        const loginRes = await new Promise((resolve, reject) => {
          wx.login({
            success: resolve,
            fail: reject
          });
        });
        if (loginRes.code) {
          code = loginRes.code;
        }
      } catch (err) {
        console.warn('获取微信登录code失败:', err);
      }

      // 创建订单（传递code，后端会换取openid）
      const res = await request.post('/pay/create', {
        productId,
        code: code
      });

      wx.hideLoading();

      if (res.success) {
        const { orderNo, payParams } = res.data;

        // 调起微信支付
        wx.requestPayment({
          timeStamp: payParams.timeStamp,
          nonceStr: payParams.nonceStr,
          package: payParams.package,
          signType: payParams.signType,
          paySign: payParams.paySign,
          success: (payRes) => {
            wx.showToast({
              title: '支付成功',
              icon: 'success'
            });

            // 支付成功后，延迟一下再跳转，确保后端已经处理完发货
            setTimeout(() => {
              wx.navigateTo({
                url: `/pages/order-detail/order-detail?orderNo=${orderNo}`
              });
            }, 2000); // 延迟2秒，确保支付回调已完成
          },
          fail: (payErr) => {
            console.error('支付失败:', payErr);
            wx.showModal({
              title: '支付失败',
              content: payErr.errMsg || '支付已取消',
              showCancel: false
            });
          }
        });
      } else {
        wx.showToast({
          title: res.message || '创建订单失败',
          icon: 'none'
        });
      }
    } catch (error) {
      wx.hideLoading();
      console.error('购买失败:', error);
      wx.showToast({
        title: '网络错误',
        icon: 'none'
      });
    }
  },

  // 下拉刷新
  onPullDownRefresh() {
    this.loadProducts().then(() => {
      wx.stopPullDownRefresh();
    });
  }
});


